home *** CD-ROM | disk | FTP | other *** search
/ Aminet 28 / Aminet 28 (1998)(GTI - Schatztruhe)[!][Dec 1998].iso / Aminet / dev / gui / gui4cli.lha / Gui4Cli / Tools / Calc.gc next >
Text File  |  1998-10-22  |  9KB  |  363 lines

  1. G4C
  2.  
  3. ; Calc.gc - by dck
  4. ; ----------------------------------------------------------------------------
  5. ; A calculator, which uses Gui4Cli's mathematical abilities to calculate
  6. ; complex math expression, including functions such as Log, Sin, Tan etc.
  7. ; This used to be based on ARexx - changed for Gui4Cli V3.5
  8. ; The code to convert between Dec<->Hex, Dec<->Bin and Hex<->Bin
  9. ; is by Björn X Öqvist, 1998-03-25
  10. ; ----------------------------------------------------------------------------
  11.  
  12. WINBIG 390 25 237 118 "FPCalc"    ; Our window.
  13. WinType 11110001                  ; It has all standard gadgets & bottom resize
  14. ; WINBACKGROUND PATTERN 0 2       ; Uncomment to add a flashy background..
  15. resinfo 8 660 270
  16.  
  17. BOX 0 0 0 0 out button ; A window sized box, taking us way beyond mere "cool"
  18.  
  19. ; ----------------------------------------------------------------------------
  20. ;       Startup/Ending events
  21. ; ----------------------------------------------------------------------------
  22.  
  23. xONLOAD                     ; Upon loading of the GUI
  24. ifexists port ~AREXX        ; check for & start rexxmast
  25.    run rexxmast
  26. endif
  27. calcvar = ""               ; This is our main variable
  28. GUIOPEN calc.gc
  29. mem  = mem1                ; These are the Memory variables
  30. mem1 = 0
  31. mem2 = 0
  32. mem3 = 0
  33. mem4 = 0
  34. mem5 = 0
  35. membuff = ""
  36. calcmode = SMALL      ; small/big window
  37.  
  38. xonclose
  39. guiquit calc.gc
  40. guiquit calc.hist
  41.  
  42. xOnQuit               ; On quitting we delete the env variables, 
  43. delvar .result
  44.  
  45. ; ----------------------------------------------------------------------------
  46. ;       BUTTONS
  47. ;       All the buttons do the same thing. They AppVar their number or letter
  48. ;       to our main variable "calcvar" and redisplay it
  49. ; ----------------------------------------------------------------------------
  50.  
  51. ;============ The Buttons for the plain numbers
  52.  
  53. XBUTTON 6 21 25 15 1
  54. gadkey 1                       ; Keyboard shortcut
  55. AppVar calcvar 1               ; AppVar the number to "calcvar"
  56. update calc.gc  1 $calcvar     ; and re-display it.
  57.  
  58. XBUTTON 33 21 25 15 2          ; same as above
  59. gadkey  2
  60. AppVar calcvar 2
  61. update calc.gc  1 $calcvar
  62.  
  63. XBUTTON 60 21 25 15 3
  64. gadkey  3
  65. AppVar calcvar 3
  66. update calc.gc  1 $calcvar
  67.  
  68. XBUTTON 6 36 25 15 4
  69. gadkey  4
  70. AppVar calcvar 4
  71. update calc.gc  1 $calcvar
  72.  
  73. XBUTTON 33 36 25 15 5
  74. gadkey  5
  75. AppVar calcvar 5
  76. update calc.gc  1 $calcvar
  77.  
  78. XBUTTON 60 36 25 15 6
  79. gadkey  6
  80. AppVar calcvar 6
  81. update calc.gc  1 $calcvar
  82.  
  83. XBUTTON 6 51 25 15 7
  84. gadkey  7
  85. AppVar calcvar 7
  86. update calc.gc  1 $calcvar
  87.  
  88. XBUTTON 33 51 25 15 8
  89. gadkey  8
  90. AppVar calcvar 8
  91. update calc.gc  1 $calcvar
  92.  
  93. XBUTTON 60 51 25 15 9
  94. gadkey  9
  95. AppVar calcvar 9
  96. update calc.gc  1 $calcvar
  97.  
  98. XBUTTON 6 66 25 15 0
  99. gadkey  0
  100. AppVar calcvar 0
  101. update calc.gc  1 $calcvar
  102.  
  103. XBUTTON 33 66 25 15 .
  104. gadkey  .
  105. AppVar calcvar .
  106. update calc.gc  1 $calcvar
  107.  
  108. XBUTTON 60 66 25 15 <        ; backspace
  109. gadkey #8
  110. cutvar calcvar CUT CHAR -1 ""   ; It will delete the last character of
  111. update calc.gc  1 $calcvar     ; "calcvar" and re-display it
  112.  
  113. ;=============== The operators
  114.  
  115. XBUTTON 87 21 25 15 /
  116. gadkey  /
  117. AppVar calcvar /
  118. update calc.gc  1 $calcvar
  119.  
  120. XBUTTON 87 36 25 15 *       ; hit twice for square
  121. gadkey  *
  122. AppVar calcvar *
  123. update calc.gc  1 $calcvar
  124.  
  125. XBUTTON 87 51 25 15 -
  126. gadkey  -
  127. AppVar calcvar -
  128. update calc.gc  1 $calcvar
  129.  
  130. XBUTTON 87 66 25 15 +
  131. gadkey  +
  132. AppVar calcvar +
  133. update calc.gc  1 $calcvar
  134.  
  135. ;------------- right most bank
  136.  
  137. XBUTTON 114 21 25 15 (
  138. gadkey  (
  139. AppVar calcvar (
  140. update calc.gc  1 $calcvar
  141.  
  142. XBUTTON 114 36 25 15 )
  143. gadkey  )
  144. AppVar calcvar )
  145. update calc.gc  1 $calcvar
  146.  
  147. XBUTTON 195 66 37 15 CLR       ; Clear
  148. gadkey #127
  149. update calc.gc  1 0
  150. setvar calcvar ""
  151. if $calcmode = BIG                ; update ticker tape
  152.    lvuse calc.hist 1
  153.    LVAdd '** Clear **'
  154. endif
  155.  
  156. XBUTTON 114 51 25 30 =
  157. gadkey #13
  158. gosub calc.gc calculate        ; GoSub the routine which does the calculation
  159.  
  160. ; =============== The function buttons
  161.  
  162. XBUTTON 141 66 25 15 "^"
  163. gadkey ^
  164. AppVar calcvar ^
  165. update calc.gc  1 $calcvar
  166.  
  167. XBUTTON 168 66 25 15 "_Pi"
  168. gadkey p
  169. AppVar calcvar pi
  170. update calc.gc  1 $calcvar
  171.  
  172. XBUTTON 141 21 44 15 "_Sin"
  173. AppVar calcvar sin(
  174. update calc.gc  1 $calcvar
  175.  
  176. XBUTTON 186 21 45 15 "_Cos"
  177. AppVar calcvar cos(
  178. update calc.gc  1 $calcvar
  179.  
  180. XBUTTON 186 36 45 15 "_Tan"
  181. AppVar calcvar tan(
  182. update calc.gc  1 $calcvar
  183.  
  184. XBUTTON 141 36 44 15 "_Log"
  185. AppVar calcvar log(
  186. update calc.gc  1 $calcvar
  187.  
  188. XBUTTON 141 51 44 15 "L_n"
  189. AppVar calcvar ln(
  190. update calc.gc  1 $calcvar
  191.  
  192. XBUTTON 186 51 45 15 "_Exp"
  193. AppVar calcvar exp(
  194. update calc.gc  1 $calcvar
  195.  
  196. ; ----------------------------------------------------------------------------
  197. ;       Display Panel
  198. ;       It's a xTEXTin gadget, so we can enter a calculation directly into it.
  199. ; ----------------------------------------------------------------------------
  200.  
  201. XTEXTIN 5 5 227 15 "" calcvar 0 512
  202. GADID 1
  203. gosub calc.gc calculate        ; GoSub the routine which does the calculation
  204.  
  205.  
  206. ; ----------------------------------------------------------------------------
  207. ;       Routine to calculate & display result
  208. ; ----------------------------------------------------------------------------
  209.  
  210. xROUTINE calculate
  211. if $calcvar > ""                ; If there is an entry
  212.    if $calcmode = BIG
  213.       lvuse calc.hist 1         ; update history window if open
  214.       LVAdd '$calcvar'
  215.    endif
  216.    calcvar = $($calcvar)        ; do calculation
  217.    update calc.gc 1 $calcvar    ; display answer
  218.    if $calcmode = BIG           ; update ticker tape
  219.       LVAdd "-> $calcvar"
  220.    endif
  221.    if $calcvar = 0 
  222.       calcvar = ""              ; and if it's 0, we empty it (looks nicer)
  223.    endif
  224. endif 
  225.  
  226. ; ----------------------------------------------------------------------------
  227. ;       MEMORIES
  228. ;       If you look at the following code carefully, you will see that we
  229. ;       need a variable within a variable. We use "membuff" to construct it.
  230. ; ----------------------------------------------------------------------------
  231.  
  232. ;============ Memories display panel
  233.  
  234. XTEXTIN 6 84 123 14 "" $mem 0 30
  235. GadID 5
  236.  
  237. ;============ Memories cycler
  238.  
  239. XCYCLER 6 99 62 15 "" mem
  240. Cstr "M1" mem1
  241. Cstr "M2" mem2
  242. Cstr "M3" mem3
  243. Cstr "M4" mem4
  244. Cstr "M5" mem5
  245. membuff = "\$$mem"         ; This means set membuff to $ + whatever is in "mem"
  246. update calc.gc 5 $membuff  ; so that it points to the correct variable
  247.  
  248. ;============ Memory IN/OUT
  249.  
  250. XBUTTON 69 99 15 15 I          ; These buttons do the usual MEM in/out/+/-
  251. $mem = $calcvar                 ; stuff that calculators do.
  252. membuff = "\$$mem"
  253. update calc.gc 5 $membuff
  254.  
  255. XBUTTON 84 99 15 15 O
  256. membuff = "\$$mem"
  257. AppVar calcvar $membuff
  258. update calc.gc 1 $calcvar
  259.  
  260. XBUTTON 99 99 15 15 +
  261. membuff = "\$$mem"
  262. $mem = $($calcvar + $membuff)
  263. membuff = "\$$mem"
  264. update calc.gc 5 $membuff
  265.  
  266. XBUTTON 114 99 15 15 -
  267. membuff = "\$$mem"
  268. $mem = $($membuff - $calcvar)
  269. membuff = "\$$mem"
  270. update calc.gc 5 $membuff
  271.  
  272. ; ----------------------------------------------------------------------------
  273. ;       Hex/Binary conversion
  274. ; ----------------------------------------------------------------------------
  275.  
  276. XTEXTIN 132 84 100 14 "" BinHex 0 30
  277. GadID 4
  278.  
  279. XCYCLER 132 99 68 15 "" BinHexMode
  280. Cstr "Hex" hex
  281. Cstr "Bin" bin
  282.         IF $BinHexMode = "bin"
  283.                 CLI "rx 'say >env:.result C2B(X2C($BinHex\))'"
  284.         ELSE
  285.                 CLI "rx 'say >env:.result C2X(B2C($BinHex\))'"
  286.         ENDIF
  287.         SetVar BinHex $.result
  288.         update calc.gc 4 $BinHex
  289.  
  290.  
  291. XBUTTON 201 99 15 15 I        ; input from main display
  292.     local res
  293.     ; calculate main display
  294.     res = $($calcvar)
  295.     ; convert into whole number (floats not allowed)
  296.     searchvar res '.' CS first
  297.     if $$search.pos != ""
  298.        pos = $$search.pos
  299.        res = $res[0][$pos]
  300.     endif
  301.         IF $BinHexMode = "bin"
  302.                 CLI "rx 'say >env:.result C2B(D2C($res\))'"
  303.         ELSE
  304.                 CLI "rx 'say >env:.result C2X(D2C($res\))'"
  305.         ENDIF
  306.         BinHex = $.result
  307.         update calc.gc 4 $BinHex
  308.  
  309.  
  310. XBUTTON 216 99 15 15 O        ; output to main display
  311.         IF $BinHexMode = "bin"
  312.                 CLI "rx 'say >env:.result C2D(B2C($BinHex\))'"
  313.         ELSE
  314.                 CLI "rx 'say >env:.result C2D(X2C($BinHex\))'"
  315.         ENDIF
  316.         AppVar calcvar $.result    ; appvar instead of setvar ?
  317.         update calc.gc 1